package com.lhx.wechat.utils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.lhx.wechat.entity.message.Article;
import com.lhx.wechat.entity.message.NewsMessage;
import com.lhx.wechat.entity.message.TextMessage;

/**
 * 微信 消息处理call
 */
public abstract class IWechatCall {

	/**
	 * 子类实现此方法，实现自定义的消息返回内容
	 * 
	 * @param requestMap
	 * @return
	 */
	public abstract String callFunction(Map<String, String> requestMap);

	/**
	 * 文本欢迎语
	 * 
	 * @param fromUserName
	 *            接收消息的来源，即关注用户的openid
	 * @param toUserName
	 *            接收消息的公众号，即当前公众号原始ID
	 * @return
	 */
	public String buildTextWelcome(String fromUserName, String toUserName) {
		TextMessage textMessage = this.newTextMsg(fromUserName, toUserName);
		textMessage.setContent("欢迎您关注本微信号，本微信号为个人测试所用，暂不推送其他相关信息，如期间收到任何消息，造成的损失，本人概不负责。再次感谢您的关注，谢谢。");
		return WechatMessageUtil.textMessageToXml(textMessage);
	}

	// 自动回复
	public String buildAutoResponse(String fromUserName, String toUserName, String content) {
		TextMessage textMessage = this.newTextMsg(fromUserName, toUserName);
		if (StringUtils.isEmpty(content)) {
			textMessage.setContent("亲爱的用户，感谢您关注本微信号，如需帮助，请发送如下编号对应的问题，快速帮您解决。\n\n" + 
					"1.账号相关问题\n" + 
					"2.搞笑留言\n" + 
					"3.微信关注\n" + 
					"4.其他问题");
		} else if (content.equals("1")) {
			textMessage.setContent("对不起，本微信号暂时不设置账号。");
		} else if (content.equals("2")) {
			textMessage.setContent("你是猴子派来的逗逼吗？");
		} else if (content.equals("3")) {
			List<Article> articleList = new ArrayList<>();
            Article article = new Article();
            article.setTitle("亲，感谢您关注本微信号。");
            article.setDescription("欢迎您关注本微信号，本微信号为个人测试所用，暂不推送其他相关信息，如期间收到任何消息，造成的损失，本人概不负责。再次感谢您的关注，谢谢。");
            article.setPicUrl("http://img.longhongxing.com/public/1.jpg");
            article.setUrl("http://www.longhongxing.com");
            articleList.add(article);

            NewsMessage newsMessage = newNewsMsg(fromUserName, toUserName, articleList);

            return WechatMessageUtil.newsMessageToXml(newsMessage);
		} else if (content.equals("4")) {
			textMessage.setContent("sorry, if you have any more questions, but i have no ideas.");
		} else {
			textMessage.setContent("亲爱的用户，感谢您关注本微信号，如需帮助，请发送如下编号对应的问题，快速帮您解决。\n\n" + 
					"1.账号相关问题\n" + 
					"2.搞笑留言\n" + 
					"3.微信关注\n" + 
					"4.其他问题");
		}
		return WechatMessageUtil.textMessageToXml(textMessage);
	}

	// 在线客服
	public String buildOnlineService(String fromUserName, String toUserName) {
		TextMessage textMessage = this.newTextMsg(fromUserName, toUserName);
		textMessage.setContent("亲~如果有任何问题，可以留言给我哦~");
		return WechatMessageUtil.textMessageToXml(textMessage);
	}

	/**
	 * 文本消息
	 * 
	 * @param fromUserName
	 *            接收消息的来源，即关注用户的openid
	 * @param toUserName
	 *            接收消息的公众号，即当前公众号原始ID
	 * @return
	 */
	public TextMessage newTextMsg(String fromUserName, String toUserName) {
		TextMessage textMessage = new TextMessage();
		textMessage.setToUserName(fromUserName);
		textMessage.setFromUserName(toUserName);
		textMessage.setCreateTime(new Date().getTime());
		textMessage.setMsgType(WechatMessageUtil.RESP_MESSAGE_TYPE_TEXT);
		textMessage.setFuncFlag(0);
		return textMessage;
	}

	public NewsMessage newNewsMsg(String fromUserName, String toUserName, List<Article> articleList) {
		NewsMessage newsMessage = new NewsMessage();
		newsMessage.setToUserName(fromUserName);
		newsMessage.setFromUserName(toUserName);
		newsMessage.setCreateTime(new Date().getTime());
		newsMessage.setMsgType(WechatMessageUtil.RESP_MESSAGE_TYPE_NEWS);
		newsMessage.setFuncFlag(0);
		newsMessage.setArticles(articleList);
		newsMessage.setArticleCount(articleList.size());
		return newsMessage;
	}
}
